js兰伯特和经纬度转换(提取自proj4js)

您所在的位置:网站首页 python 经纬度转utm js兰伯特和经纬度转换(提取自proj4js)

js兰伯特和经纬度转换(提取自proj4js)

2023-04-22 02:30| 来源: 网络整理| 查看: 265

​​//初始化常用的变量,直接换算成弧度,提升计算性能​​​​var​​​ ​​EPSLN = (​​​​typeof​​​ ​​Number.EPSILON === ​​​​'undefined'​​​​) ? 1.0e-10 : Number.EPSILON;​​

​​var​​​ ​​conv = 180 / Math.PI;​​

​​var​​​ ​​HALF_PI = Math.PI / 2;​​

​​var​​​ ​​SPI = 3.14159265359;​​

​​var​​​ ​​TWO_PI = 2 * Math.PI;​​

​​var​​​ ​​a = 6378137;​​​​var​​​ ​​b = 6356752.314245179;​​

​​var​​​ ​​e = 0.08181919084262157;​​

​​var​​​ ​​lat1 = 0.52359877559829;​​

​​var​​​ ​​lat2 = 1.04719755119659; ​​

​​var​​​ ​​long0 = 1.8029251173101;​​

​​var​​​ ​​lat0 = 0;​​

​​var​​​ ​​k0 = 1; ​​

​​var​​​ ​​ns;​​

​​var​​​ ​​f0;​​

​​var​​​ ​​rh;​​

​​//常用的转换参数,直接提取引用​​

​​var​​​ ​​tsfnz = ​​​​function​​​​(eccent, phi, sinphi) {​​

​​var​​​ ​​con = eccent * sinphi;​​

​​var​​​ ​​com = 0.5 * eccent;​​

​​con = Math.pow(((1 - con) / (1 + con)), com);​​

​​return​​​​(Math.tan(0.5 * (HALF_PI - phi)) / con);​​

​​};​​

​​var​​​ ​​sign = ​​​​function​​​​(x) {​​

​​return​​​ ​​x < 0 ? -1 : 1;​​

​​};​​

​​var​​​ ​​msfnz = ​​​​function​​​​(eccent, sinphi, cosphi) {​​

​​var​​​ ​​con = eccent * sinphi;​​

​​return​​​ ​​cosphi / (Math.sqrt(1 - con * con));​​

​​};​​

​​var​​​ ​​adjust_lon = ​​​​function​​​​(x) {​​

​​return​​​​(Math.abs(x) EPSLN) {​​

​​ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);​​

​​} ​​​​else​​​ ​​{​​

​​ns = sin1;​​

​​}​​

​​if​​​​(isNaN(ns)) {​​

​​ns = sin1;​​

​​}​​

​​f0 = ms1 / (ns * Math.pow(ts1, ns));​​​​rh = a * f0 * Math.pow(ts0, ns);​​​​}​​

​​//经纬度坐标转兰伯特坐标​​

​​function​​​ ​​projCood(lon, lat) {​​

​​lon = lon / conv;​​​​lat = lat / conv;​​

​​if​​​​(Math.abs(2 * Math.abs(lat) - Math.PI) EPSLN) {​​

​​ts = tsfnz(e, lat, Math.sin(lat));​​

​​rh1 = a * f0 * Math.pow(ts, ns);​​

​​} ​​​​else​​​ ​​{​​

​​con = lat * ns;​​

​​if​​​​(con 0) {​​

​​rh1 = Math.sqrt(x * x + y * y);​​​​con = 1;​​

​​} ​​​​else​​​ ​​{​​

​​rh1 = -Math.sqrt(x * x + y * y);​​​​con = -1;​​

​​}​​

​​var​​​ ​​theta = 0;​​

​​if​​​​(rh1 !== 0) {​​

​​theta = Math.atan2((con * x), (con * y));​​

​​}​​

​​if​​​​((rh1 !== 0) || (ns > 0)) {​​​​con = 1 / ns;​​​​ts = Math.pow((rh1 / (a * f0)), con);​​​​lat = phi2z(e, ts);​​​​if​​​​(lat === -9999) {​​​​return​​​ ​​null​​​​;​​​​}​​​​} ​​​​else​​​ ​​{​​​​lat = -HALF_PI;​​​​}​​​​lon = adjust_lon(theta / ns + long0);​​​​return​​​ ​​[lon * conv, conv * lat];​​​​}​​



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3